import functools

def log(text):
    if isinstance(text,str):
        def decorator(func):
            @functools.wraps(func)
            def wrapper():
                print('begin %s %s():' %(text, func.__name__))
                func()
                print('end call %s():' %now.__name__)
                return
            return wrapper
        return decorator
    else:
        @functools.wraps(text)     #注：此时的text就相当于log没有参数时的func一样
        def wrapper():
            print('begin %s():' %text.__name__)
            text()
            print('end %s():' %text.__name__)
            return
        return wrapper

@log
def now():
    print('2015-3-25')

@log('execute')
def f():
    print('2015-3-25')
f()
print('-------------------\n\n')
now()   